java outOfMemoryError 与 stringbuilder
全部标签 StringBuilder是如何工作的?它在内部做什么?它使用不安全代码吗?为什么它这么快(与+运算符相比)? 最佳答案 当您使用+运算符构建字符串时:strings="01";s+="02";s+="03";s+="04";然后在第一次连接时,我们创建一个长度为4的新字符串,并将“01”和“02”复制到其中——复制了四个字符。在第二次连接中,我们创建了一个长度为6的新字符串,并将“0102”和“03”复制到其中——复制了六个字符。在第三个concat中,我们创建了一个长度为8的字符串,并将“010203”和“04”复制到其中——复
我不得不使用StringBuilder而不是字符串列表,因为这个项目一直使用.NET1.1。我想将我已经写入的一系列调试消息写入一个文件,以便在闲暇时研究,因为屏幕上有太多东西要看(MessageBox没有滚动条)。.NET1.1似乎不提供一些编写文件的简单方法。我也无权访问Environment.Newline来清楚地分隔我附加的行(AppendLine在这个古老版本的StringBuilder中也不可用)。.NET1.1(C#)中将StringBuilder的内容写入文件的最简单方法是什么?手持设备上没有“C”驱动器,所以我想我必须将它写入“\hereIAm.txt”或其他内容。
将StringBuilder写入System.IO.Stream的最佳方法是什么?我目前正在做:StringBuildermessage=newStringBuilder("Allyourbase");message.Append("arebelongtous");System.IO.MemoryStreamstream=newSystem.IO.MemoryStream();System.Text.ASCIIEncodingencoding=newASCIIEncoding();stream.Write(encoder.GetBytes(message.ToString()),0,m
有人告诉我用StringBuilder连接字符串更快。我已经更改了我的代码,但我没有看到任何属性或方法来获取最终的构建字符串。如何获取字符串? 最佳答案 您可以使用.ToString()从StringBuilder获取String。 关于c#-StringBuilder:如何获得最终的字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/227743/
string和StringBuilder有什么区别?另外,有什么例子可以帮助理解? 最佳答案 string实例是不可变的。创建后无法更改。任何看似更改字符串的操作都会返回一个新实例:stringfoo="Foo";//returnsanewstringinstanceinsteadofchangingtheoldonestringbar=foo.Replace('o','a');stringbaz=foo+"bar";//dittohere不可变对象(immutable对象)有一些很好的属性,比如它们可以跨线程使用而不用担心同步问题
我有一个字符串,我需要用字典中的值替换其中的标记。它必须尽可能高效。使用string.replace进行循环只会消耗内存(记住,字符串是不可变的)。StringBuilder.Replace()会更好吗,因为它是为处理字符串操作而设计的?我希望避免RegEx的开销,但如果那样会更有效,那就这样吧。注意:我不关心代码复杂度,只关心它运行的速度和消耗的内存。平均统计数据:长度为255-1024个字符,字典中有15-30个键。 最佳答案 使用以下代码使用RedGateProfilerclassProgram{staticstringdat
我有以下内容data.AppendFormat("{0},",dataToAppend);这个问题是我在循环中使用它并且会有一个尾随逗号。删除尾随逗号的最佳方法是什么?我是否必须将数据更改为字符串然后将其子字符串化? 最佳答案 最简单和最有效的方法是执行这个命令:data.Length--;通过执行此操作,您将指针(即最后一个索引)移回一个字符,但不会更改对象的可变性。事实上,清除StringBuilder最好也用Length来完成(但为了清楚起见,实际上应该使用Clear()方法,因为这就是它的实现看起来像):data.Lengt
如何在StringBuilder中添加换行符(\n\r)? 最佳答案 我会使用Environment.NewLineproperty.类似于:StringBuildersb=newStringBuilder();sb.AppendFormat("Foo{0}Bar",Environment.NewLine);strings=sb.ToString();或者StringBuildersb=newStringBuilder();sb.Append("Foo");sb.Append("Foo2");sb.Append(Environmen
当我使用空字符'\u0000'时,stringbuilder将停止追加新元素。例如:StringBuilder_stringBuilder=newStringBuilder();_stringBuilder.append('\u0000');_stringBuilder.append('a');System.out.println("."+_stringBuilder+".");返回.我知道不应该打印空值(或者像空字符串值一样打印)但在这种情况下,为什么stringbuilder无法添加更多元素?注意:我在ubuntu上使用的是jdk1.6.0_38。 最佳
我需要在一个循环中不断构建大字符串并将它们保存到数据库中,这目前偶尔会产生OutOfMemoryException。这里的基本情况是我根据一些数据使用XmlWriter和StringBuilder创建一个字符串。然后我从外部库中调用一个方法,将这个xml字符串转换为其他字符串。之后,转换后的字符串将保存到数据库中。整个过程针对不同的数据循环重复执行大约100次。字符串本身并不太大(每个小于500kByte),并且在此循环期间进程内存没有增加。但是,偶尔我会在StringBuilder.Append中得到一个OutOfMemeoryExcpetion。有趣的是,这个异常不会导致崩溃。我可